package com.ruicar.afs.cloud.basic.proceeds.debit.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruicar.afs.cloud.basic.proceeds.debit.condition.SingleDebitCondition;
import com.ruicar.afs.cloud.basic.proceeds.debit.entity.BasicDebitRecord;
import com.ruicar.afs.cloud.basic.proceeds.debit.vo.SingleDebitReadyVo;
import com.ruicar.afs.cloud.common.modules.contract.enums.DebitStatusEnum;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author: Lee
 * @date 2020-05-30 04:13:03 
 * @description 
 */
public interface BasicDebitRecordMapper extends BaseMapper<BasicDebitRecord> {

    /**
     *
     * <p>Description: 生成扣款批次时使用乐观锁更新待扣款数据</p>
     *
     * @param var1 正在扣款金额
     * @param var2 扣款状态
     * @param var3 批次号
     * @param var4 id
     * @param var5 乐观锁
     * @return
     */
    @Update({"update basic_debit_record set going_amt=#{goingAmt},debit_status=#{debitStatus},batch_id=#{batchId},revision = revision + 1 where id=#{id} and revision=#{revision}"})
    int updateWhenGenerateDebitBatch(@Param("goingAmt") BigDecimal var1, @Param("debitStatus") DebitStatusEnum var2, @Param("batchId") Long var3, @Param("id") Long var4, @Param("revision") Long var5);
    /**
     *
     * <p>Description: 扣款失败时使用乐观锁更新待扣款数据</p>
     *
     * @param var1 正在扣款金额
     * @param var2 扣款状态
     * @param var3 批次号
     * @param var4 手动扣款失败次数
     * @param var5 id
     * @param var6 乐观锁
     * @return
     */
    @Update({"update basic_debit_record set going_amt=#{goingAmt},debit_status=#{debitStatus},batch_id=#{batchId},manual_num=#{manualNum},revision = revision + 1 where id=#{id} and revision=#{revision}"})
    int updateWhenGenerateDebitFailed(@Param("goingAmt") BigDecimal var1, @Param("debitStatus") DebitStatusEnum var2, @Param("batchId") Long var3, @Param("manualNum") Integer var4, @Param("id") Long var5, @Param("revision") Long var6);
    /**
     *
     * <p>Description: 扣款成功时使用乐观锁更新待扣款数据</p>
     *
     * @param var1 扣款成功金额
     * @param var2 正在扣款金额
     * @param var3 当日核销金额
     * @param var4 扣款状态
     * @param var5 id
     * @param var6 乐观锁
     * @return
     */
    @Update({"update basic_debit_record set batch_id = null, succeed_amt=#{succeedAmt},going_amt=#{goingAmt},write_off_amt=#{writeOffAmt},debit_status=#{debitStatus},revision = revision + 1 where id=#{id} and revision=#{revision}"})
    int updateWhenGenerateDebitSuccess(@Param("succeedAmt") BigDecimal var1, @Param("goingAmt") BigDecimal var2, @Param("writeOffAmt") BigDecimal var3, @Param("debitStatus") DebitStatusEnum var4, @Param("id") Long var5, @Param("revision") Long var6);


    /**
     * 查询所有的可扣款签约银行
     * @author ZC.GUO
     * @param var1 扣款状态
     * @return
     */
    @Select({"select distinct debit_sign_bank from basic_debit_record where debit_status=#{debitStatus}"})
    List<String> selectDebitSignBank(@Param("debitStatus") DebitStatusEnum var1);
    
    /**
     * 根据扣款银行查询合同号码
     * @author ZC.GUO
     * @param var1 扣款签约银行
     * @param var2 扣款状态
     * @return
     */
    @Select({"select distinct contract_no from basic_debit_record where debit_sign_bank=#{debitSignBank}"})
    List<String> selectContractNoByBank(@Param("debitSignBank") String var1,@Param("debitStatus") DebitStatusEnum var2);


    /**
     * 按条件查询可以进行单笔代扣的合同集合
     * @author ZC.GUO
     * @param page 分页对象
     * @param query 查询条件封装
     * @return
     */
    IPage<SingleDebitReadyVo> selectSingleDebitReadyContract(Page page, @Param("query") SingleDebitCondition query);
    /**
     * 根据合同编号查询待扣款信息
     * @author ZC.GUO
     * @param contractNo 合同编号
     * @return
     */
    BasicDebitRecord selectAmountAndTimeByContractNo(@Param("contractNo") String contractNo);
}
